> time ./a.out a.out b.out
real    0m0.002s
user    0m0.002s
sys     0m0.001s

> gcc copy.c -DBUF_SIZE=32
> time ./a.out a.out b.out
real    0m0.004s
user    0m0.000s
sys     0m0.004s

> gcc copy.c -DBUF_SIZE=1
> time ./a.out a.out b.out
real    0m0.050s
user    0m0.013s
sys     0m0.037s

-- TURNED SYNC ON

> gcc copy.c -DBUF_SIZE=32
> time ./a.out a.out b.out
real    0m18.273s
user    0m0.008s
sys     0m0.079s

I also tried it with buffer size = 1, I waited 30 seconds and interrupted it, 
because I think it would take much longer, a lot longer. Whereas, without O_SYNC
it was a lot faster and the buffer size change didn't ake much of an impact.